package com.yeban.javase.day18.test.test01;

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @Desc TODO
 * @Author yeban
 * @Date 2025/11/2
 *
 * 需求：
 * 线程1要执行打印：A和C，线程2要执行打印：B，
 * 但线程1在打印A后，要线程2打印B之后才能打印C，
 * 所以：线程1在打印A后，必须等待线程2打印完B之后才能继续执行。
 *
 * 多线程的情况下 C -> B -> A
 * 阻塞队列LinkedBlockingQueue等等
 */
public class LinkedBlockingQueue2CBA {

    public static void main(String[] args) {

        LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<>(1);

        new Thread(() -> {
            try {
                System.out.println("C");
                queue.take();
                System.out.println("A");
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }).start();

        new Thread(() -> {
            try {
                System.out.println("B");
                queue.put("B打印了");
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }).start();
    }
}
